// 全局常量：全部大写，多个单词之间使用下划线分割 const GOODS_TYPE =1
const PENDING = "pending";
const FULFILLED = "fulfilled";
const REJECTED = "rejected";
// executor:接收的执行器函数
function Promise(executor){
	// 设置初始状态
	this.state = PENDING;
	// 设置初始状态值
	this.result = undefined;
	function _resolve(v){
		// 判断状态是否已经被更改
		if(this.state !== PENDING) return;
		this.state = FULFILLED;
		this.result = v;
	}
	function _reject(v){
		if(this.state !== PENDING) return;
		this.state = REJECTED;
		this.result = v;
	}
	try{
		// 调用执行器函数，并传递两个参数（类型为函数）
		executor(_resolve.bind(this),_reject.bind(this));
	}catch (err){
		_reject.call(this,err);
	}
}
Object.assign(Promise.prototype,{
	// onResolved:成功回调
	// onRejected:失败回调
	then(onResolved,onRejected){
		// 返回了一个新的Promise实例
		return new Promise((resolve,reject)=>{
			// 状态为fulfilled调用onResolved
			// 状态为rejected调用onRejected
			if(this.state === FULFILLED){
				setTimeout(()=>{
					try{
						// 成功回调的返回值
						const value = onResolved(this.result);
						if(value instanceof Promise){
							// 如果value是一个Promise,那么将返回值Promise实例的状态以及值与value的状态和值相同。
							// value的状态为成功执行成功回调，并将成功值进行传递
							// value的状态为失败执行失败回调，并将失败值进行传递
							// value.then((v)=>{
							// 	resolve(v);
							// },(r)=>{
							// 	reject(r);
							// })
							
							value.then(resolve,reject)
						}else{
							// 如果value是一个非Promise,那么将返回值Promise实例设置为成功，值为value
							resolve(value);
						}
					}catch (e){
						reject(e);
					}
				})
				
			}else if(this.state === REJECTED){
				setTimeout(()=>{
					try{
						const value = onRejected(this.result);
						if(value instanceof Promise){
							value.then(resolve,reject)
						}else{
							resolve(value);
						}
					}catch (e){
						reject(e);
					}
					
				})
			}
		})
		
	}
})